Flutter RenderBox
RenderObject 是 Flutter 三颗树中最终执行绘制的,Widget 最终会被拆解为一系列 RenderObject 进行绘制。RenderObject 拥有许多派生类,其中一个派生类是 RenderBox,表示使用 2D 坐标系。除此之外,还有其它派生类,比如使用极坐标坐标系的。
继承自 RenderObject,RenderBox 的主要能力包括:
- 布局(Layout):覆写
performLayout
方法 - 绘制(Painting):覆写
paint
方法 - 命中测试(Hit Testing):覆写
hitTest
方法
派生类
有大量继承类:
- RenderEditable
- RenderErrorBox
- RenderFlex
- RenderFlow
- RenderImage
- RenderListBody
- RenderParagraph
- RenderPerformanceOverlay
- RenderUiKitView
- PlatformViewRenderBox
- RenderProxyBox
- RenderStack
- RenderWrap
- ……
子类派生
为什么继承:创造一种新的布局模型、绘制模型、点击测试模型,或者新的语义模型。
但遵守笛卡尔坐标系。如果不遵守笛卡尔坐标系,考虑基于 RenderObject 继承。
子元素
如果 Render Object 是叶子节点,不能拥有子元素。例子是 RenderImage 和 RenderParagraph。
对于带有子元素的 Render Object,有 4 中常见场景:
一个 RenderBox 子元素,这种情况考虑继承这俩:
- RenderProxyBox:当前 RenderBox 的大小等于元素大小
- RenderShiftedBox:子元素大小小于当前 RenderBox,并且当前 RenderBox 会对子元素进行内部对齐操作
一个子元素,但是不是 RenderBox,此时使用 RenderObjectWithChildMixin。
一个子元素列表,此时使用 ContainerRenderObjectMixin。
第四类是复杂子元素模型,不满足的都放在这一类里。
网络资源
本文作者:Maeiee
本文链接:Flutter RenderBox
版权声明:如无特别声明,本文即为原创文章,版权归 Maeiee 所有,未经允许不得转载!
喜欢我文章的朋友请随缘打赏,鼓励我创作更多更好的作品!